package com.mlh.string;

/**
 * @author 缪林辉
 * @date 2024/3/1 11:38
 * @DESCRIPTION
 * 给定一个非空的字符串 s ，检查是否可以通过由它的一个子串重复多次构成。
 * 输入: s = "abab"
 * 输出: true
 * 解释: 可由子串 "ab" 重复两次构成。
 */


public class RepeatedSubstringPattern {
    //看力扣题解写出
    //很简单字符串如果是由重复子串构成的，子串数量最少有两个
    //假设字符串长度为n，那么子串长度范围为1-n/2
    //因此就用穷举遍历所有的子串长度
    //如果字符串确实由子串构成，那么
    //在第一个子串之后，任意位置i的字符  与ta前i个字符必须相同，即 s[i]=s[i-n]
    //因此只要满足这个条件，该字符串就是由重复子串构成的
    public boolean method1(String s) {
        //怎么判断？
        //子串可大可小
        //如果是重复子串构成的是否一定是回文字符串？
        //abc abc abc  这个例子就不是回文字符串
        //重复子串构成的字符串有什么特性？
        int len=s.length();
        boolean res=false;
        for(int i=1;i<=len/2;i++){
            if(len%i==0){
                for(int j=i;j<len;j++){
                    res=true;
                    if(s.charAt(j)!=s.charAt(j-i)){
                        res=false;
                        break;
                    }
                }
                if(res){
                    return true;
                }
            }
        }
        return false;
    }

    //这是力扣的解法2 详情去看力扣 利用字符串匹配
    public boolean method2(String s) {
        return (s + s).indexOf(s, 1) != s.length();
    }
}
